package com.kylin.common.weixin.mp.api;

import com.alibaba.fastjson2.JSONObject;
import com.kylin.common.weixin.mp.enums.QrcodeType;
import com.kylin.common.weixin.util.WxRequest;
import org.apache.commons.lang3.StringUtils;

/**
 * 二维码相关接口
 * @author wuhao
 * @version 1.0 - 2023/6/5
 */
public class QrcodeService {

    public static final String QRCODE_CREATE = "/cgi-bin/qrcode/create";

    /**
     * 创建二维码ticket
     * @param expireSeconds 该二维码有效时间，以秒为单位。 最大不超过2592000（即30天），此字段如果不填，则默认有效期为60秒。
     * @param actionName 二维码类型，QR_SCENE为临时的整型参数值，QR_STR_SCENE为临时的字符串参数值，QR_LIMIT_SCENE为永久的整型参数值，QR_LIMIT_STR_SCENE为永久的字符串参数值
     * @param sceneId 场景值ID，临时二维码时为32位非0整型，永久二维码时最大值为100000（目前参数只支持1--100000）
     * @param sceneStr 场景值ID（字符串形式的ID），字符串类型，长度限制为1到64
     * @param appid 资源复用，不为空
     * @return  
     * @author wuhao
     * @version 1.0.0 - 2023/6/5
     */
    public static JSONObject createTicket(long expireSeconds, QrcodeType actionName, Integer sceneId, String sceneStr,String appid) {
        JSONObject params = new JSONObject();
        params.put("expire_seconds", expireSeconds);
        params.put("action_name", actionName.name());
        JSONObject actionInfo = new JSONObject();
        JSONObject scene = new JSONObject();
        if(actionName == QrcodeType.QR_SCENE || actionName == QrcodeType.QR_LIMIT_SCENE) {
            scene.put("scene_id", sceneId);
        } else {
            scene.put("scene_str", sceneStr);
        }
        actionInfo.put("scene", scene);
        params.put("action_info", actionInfo);
        String url = QRCODE_CREATE;
        if(StringUtils.isNotBlank(appid)) {
            url += "?from_appid=" + appid;
        }
        return WxRequest.post(url, params.toJSONString());
    }
}
